#ifndef TAREFA_TAREFAS_PRONTAS_H
#define TAREFA_TAREFAS_PRONTAS_H

#include "tarefa/tarefa.h"

#include <boost/function.hpp>

using namespace boost;

namespace tarefa {
/**
  * \brief encapsula funcao em uma tarefa.
  * 
  * Caso uma tarefa nao precise ser nada alem de uma simples funcao,
  * use esta classe para encapsular a funcao em uma tarefa.
  */
class func_tarefa : public tarefa {
  public:
  func_tarefa(function<bool (int)> f):func_(f) {}
  bool executa(int passou) {
    return func_(passou);
  }
  private:
  function<bool (int)> func_;
};

template <typename _T>
class linear : public tarefa {
  public:
  linear(_T &var, double vel):tarefa(true), var_(var), vel_(vel) {}
  virtual bool executa(int passou) {
    var_ += vel_*passou;
    return true;
  }
  private:
  _T& var_;
  double vel_;
};

}

#endif
